const express = require("express");
const cors = require("cors");
// 导入路由
const userRouter = require("./router/user");
const userInfoRouter = require("./router/userInfo");
const catesRouter = require("./router/cates");
const articlsRouter = require("./router/articls");
const expressJwt = require("express-jwt");
const config = require("./config");
// 数据校验
const joi = require("joi");
const { required } = require("joi");
const app = express();
// 处理跨域
app.use(cors());
// 配置解析表单数据中间件  解析application/x-www-form-urlencoded格式
app.use(express.urlencoded({ extended: false }));
// 配置解析application/json格式中间件
app.use(express.json());
// 封装错误信息的函数
app.use((req, res, next) => {
    res.mess = function(err, status = 201) {
        res.send({
            status,
            mesaage: err instanceof Error ? err.message : err,
        });
    };
    next();
});
// 配置解析token的中间件
app.use(
    expressJwt({
        secret: config.jwtSecretKey,
        algorithms: config.algorithms,
    }).unless({ path: [/^\/api\//] })
);
// 用户模块————注册、登录
app.use("/api", userRouter);
// 用户信息模块
app.use("/kk", userInfoRouter);
// 分类模块
app.use("/kk", catesRouter);
// 文章模块
app.use("/kk", articlsRouter);
// 定义错误界别中间件
app.use((err, req, res, next) => {
    // 校验失败错误
    if (err instanceof joi.ValidationError) return res.mess(err);
    // token错误
    if (err.name === "UnauthorizedError") {
        console.log(err);
        return res.mess("身份认证失败！无效的roken!");
    }
    // 未知错误
    res.mess(err);
});
app.listen("3306", () => {
    console.log("跑起来了  http://127.0.0.1:3306");
});